package collection_try;
import java.util.*;

/*Set接口继承于Collection接口，Collection有的他都有
Set全都：元素唯一（不重复），无序（按照一定哈希算法选择元素放置位置,内存地址不挨着），
Set接口的API和List接口大致相同，但是少了和索引相关的API，Set中没有索引
Set底层都是用Map实现
特殊的set：LinkedHashSet:底层实现加了链表，数据存储有序了，按照输入顺序输出
            TreeSet:和HashSet基本一样，只是底层是用二叉树实现的（遍历方式为中序遍历）
*/
public class HashSetTest {
    public static void main(String[] args) {
        Set<Object> set = new HashSet<>();
        //去重，根据Set特性，数据唯一
        set.add(1);set.add(1);set.add(1);set.add(1);set.add(1);set.add(1);
        System.out.println("向set集合中添加6个元素1，根据数据唯一特性，集合中将只有1个1："+set);
        //无序测试
        set.add("a");set.add("b");set.add(2);set.add(3);set.add(4);
        set.add(5);set.add(6);set.add(7);set.add("c");set.add("d");set.add("e");
        System.out.println("Set集合无序测试，查看是否和插入顺序一至：" +set);
        //add方法，添加元素成功，返回true，添加失败，返回false，表示重复了，集合中有了
        System.out.println("测试添加集合中没有的值，添加元素10："+set.add(10));
        System.out.println("测试添加集合中已经有值，添加元素1："+set.add(1));
        System.out.println("Set集合：" +set);
        //remove
        System.out.println("测试删除集合中已经有值，删除元素c："+set.remove("c"));
        System.out.println("测试删除集合中没有的值，删除元素f："+set.remove("f"));
        System.out.println("Set集合：" +set);


        Set<Integer> set1 = new TreeSet<>((o1, o2) -> o2 - o1); //顺序改变
        set1.add(51);set1.add(36);set1.add(17);set1.add(23);
        System.out.println("TreeSet集合测试，顺序：" +set1);


        Set<Integer> set2 = new LinkedHashSet<>();
        set2.add(12);set2.add(34);set2.add(5);set2.add(null);
        System.out.println("LinkedHashSet集合测试，顺序：" +set2);
    }
}
